#include "step_motor.h"
 
u8 STEP; 
 



void STEP_MOTOR_OFF (void)  //电机断电 全拉低
{
    HAL_GPIO_WritePin(STEP_MOTOR_PORT_A, STEP_MOTOR_A, GPIO_PIN_RESET);//各接口置0
    HAL_GPIO_WritePin(STEP_MOTOR_PORT_B, STEP_MOTOR_B, GPIO_PIN_RESET);//各接口置0
    HAL_GPIO_WritePin(STEP_MOTOR_PORT_C, STEP_MOTOR_C, GPIO_PIN_RESET);//各接口置0
    HAL_GPIO_WritePin(STEP_MOTOR_PORT_D, STEP_MOTOR_D, GPIO_PIN_RESET);//各接口置0
}
 
void STEP_MOTOR_8A (u8 a,u16 speed)  //电机单步8拍
{
	switch (a){
		case 0:
		HAL_GPIO_WritePin(STEP_MOTOR_PORT,STEP_MOTOR_B | STEP_MOTOR_C | STEP_MOTOR_D, GPIO_PIN_RESET);//0
		HAL_GPIO_WritePin(STEP_MOTOR_PORT,STEP_MOTOR_A, GPIO_PIN_SET);//1
			break;
		case 1:
		HAL_GPIO_WritePin(STEP_MOTOR_PORT,STEP_MOTOR_C | STEP_MOTOR_D, GPIO_PIN_RESET);//0
		HAL_GPIO_WritePin(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B, GPIO_PIN_SET);//1
			break;
		case 2:
		HAL_GPIO_WritePin(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_C | STEP_MOTOR_D, GPIO_PIN_RESET);//0
		HAL_GPIO_WritePin(STEP_MOTOR_PORT,STEP_MOTOR_B, GPIO_PIN_SET);//1
			break;
		case 3:
		HAL_GPIO_WritePin(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_D, GPIO_PIN_RESET);//0
		HAL_GPIO_WritePin(STEP_MOTOR_PORT,STEP_MOTOR_B | STEP_MOTOR_C, GPIO_PIN_SET);//1
			break;
		case 4:
		HAL_GPIO_WritePin(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B | STEP_MOTOR_D, GPIO_PIN_RESET);//0
		HAL_GPIO_WritePin(STEP_MOTOR_PORT,STEP_MOTOR_C, GPIO_PIN_SET);//1
			break;
		case 5:
		HAL_GPIO_WritePin(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B, GPIO_PIN_RESET);//0
		HAL_GPIO_WritePin(STEP_MOTOR_PORT,STEP_MOTOR_C | STEP_MOTOR_D, GPIO_PIN_SET);//1
			break;
		case 6:
		HAL_GPIO_WritePin(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B | STEP_MOTOR_C, GPIO_PIN_RESET);//0
		HAL_GPIO_WritePin(STEP_MOTOR_PORT,STEP_MOTOR_D, GPIO_PIN_SET);//1
			break;
		case 7:
		HAL_GPIO_WritePin(STEP_MOTOR_PORT,STEP_MOTOR_B | STEP_MOTOR_C, GPIO_PIN_RESET);//0
		HAL_GPIO_WritePin(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_D, GPIO_PIN_SET);//1
			break;
		default:
			break;
	}
	delay_ms(speed); //延时
	STEP_MOTOR_OFF();//进入断电状态，防电机过热
}
 
 
void STEP_MOTOR_NUM (u8 RL,u16 num,u8 speed)  //电机按步数运行
{
	u16 i;
	for(i=0;i<num;i++)
    {	
		if(RL==1){ //当RL=1右转，RL=0左转
			STEP++;
			if(STEP>7)STEP=0;
		}else{
			if(STEP==0)STEP=8;
			STEP--;
		}
		STEP_MOTOR_8A(STEP,speed);
	}
}
 
void STEP_MOTOR_LOOP (u8 RL,u8 LOOP,u8 speed)  //电机按圈数运行
{
	STEP_MOTOR_NUM(RL,LOOP*4076,speed); 
}


	
	// while (1)
	// {
	// 	STEP_MOTOR_LOOP(1,1,2);  //步进电机正传
 
	// 	delay_ms(2000);
	// 	STEP_MOTOR_LOOP(0,1,2);  //步进电机反传
	// 	delay_ms(2000);
		
	// }

	





